'use strict';

var express = require('express');
var timeout = require('connect-timeout');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var AV = require('leanengine');

// 加载云函数定义，你可以将云函数拆分到多个文件方便管理，但需要在主文件中加载它们
require('./cloud');

var app = express();
var OAuth = require("wechat-oauth");
var CorpID = "wxd3eefbabf1462f41".trim();
// wxd3eefbabf1462f41
// var Secret = "rybD5p-KQAyPpCdUf1gTn4PSpu5scZLzcHh65pytQuM".trim();
var Secret = "6026026a9aeac4fd4e49468229728ffe".trim();
// 6026026a9aeac4fd4e49468229728ffe
var AgentId = "1000003";
var domain = "http://iwantzr.leanapp.cn"
var opid = "oopip"

// var client = new OAuth(AgentId,Secret);
// var client = new OAuth(CorpID,Secret);


// 设置模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(express.static('public'));

// 设置默认超时时间
app.use(timeout('15s'));

// 加载云引擎中间件
app.use(AV.express());

app.enable('trust proxy');
// 需要重定向到 HTTPS 可去除下一行的注释。
// app.use(AV.Cloud.HttpsRedirect());

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

// 查询用户是否投过票了
function wxIsT(wxid){
  var querywx = new AV.Query('Wxuser2movie');
  querywx.equalTo('wxid',wxid);
  return querywx.find().then(function(result){
      if(result.length>0){
        return 1;
      }else{return 0;}
    },function(err){})
}

// 创建用户-视频投票
function creatW2M(wx_id,movie_id){
  var Wxuser2movie = AV.Object.extend('Wxuser2movie');
  var wx2m = new Wxuser2movie();
  wx2m.set('wxid', wx_id);
  wx2m.set('movieid', movie_id);
  return wx2m.save()
}

// 更新视频的播放数
function upReadnum(movie_id){
  var query = new AV.Query('mp4file');
  return query.get(movie_id).then(function(sfile){
    sfile.increment('readnum');
    return sfile.save()
  },function(err){})
}

// 更新视频的投票数
function upClicknum(movie_id){
  var query = new AV.Query('mp4file');
  return query.get(movie_id).then(function(sfile){
    sfile.increment('clicknum');
    return sfile.save()
  },function(err){})
}

// 主页
app.get('/', function(req, res) {
  var code=req.query.code;
  var query = new AV.Query('mp4file');

  console.log(code);
  console.log(CorpID,Secret);
  var client = new OAuth(CorpID,Secret);
  client.getAccessToken(code,function(err,result){
  //   console.log("===============");
    console.log(result);
  //   // var accessToken = result.data.access_token;
    var openid = result.data.openid;
    var wx_id=openid||"noone";
    // 先查此人有没有投票
    wxIsT(wx_id)
    .then(function(isT){
      query.find().then(function(results) {
        res.render('index', {
          title: '视频列表',
          sfiles: results,
          isT:isT,
          wx_id:wx_id
        });
      }, function(err) {});
    });
  });

  
});

// 详情页面
app.get('/sfileinfo',function(req,res){
  var id=req.query.id;
  var wx_id = req.query.wx_id;
  var isT = req.query.isT;

  wxIsT(wx_id)
  .then(function(isT2){

  upReadnum(id)
  .then(function(movie){
      res.render('sfileinfo', {
        sfile: movie,
        wx_id:wx_id,
        isT:Number(isT2)
      });
    });


  })

})

// 投票
app.post('/vote',function(req,res){
  console.log("投票截止");
  res.json({
    staus: '活动已结束，感谢您的参加',
    ist:1
  });
  console.log("截止失败？");
  // var wx_id=req.body.wx_id;
  // var movie_id=req.body.movie_id;
  // console.log("用户"+wx_id+"在为编号："+movie_id+"的视频投票");
  // // 查询是否投过票了
  // wxIsT(wx_id)
  // .then(function(isT){
  //   if(isT){
  //     res.json({staus:"您已经投过票了",ist:1})
  //   }else{
  //     creatW2M(wx_id,movie_id)
  //     .then(function(movie){
  //             upClicknum(movie_id)
  //             .then(function(movie){
  //               console.log("投票成功");
  //               res.json({
  //                 staus: '投票成功！',
  //                 ist:0
  //               });
  //             })
  //     })
  //   }
  // })
})

// 可以将一类的路由单独保存在一个文件中
// app.use('/todos', require('./routes/todos'));

// 添加视频
app.use('/addsfile',require('./routes/sfiles'))

// app.use('/register',require('./routes/sysuse'))

app.use(function(req, res, next) {
  // 如果任何一个路由都没有返回响应，则抛出一个 404 异常给后续的异常处理器
  if (!res.headersSent) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
  }
});

// error handlers
app.use(function(err, req, res, next) {
  if (req.timedout && req.headers.upgrade === 'websocket') {
    // 忽略 websocket 的超时
    return;
  }

  var statusCode = err.status || 500;
  if (statusCode === 500) {
    console.error(err.stack || err);
  }
  if (req.timedout) {
    console.error('请求超时: url=%s, timeout=%d, 请确认方法执行耗时很长，或没有正确的 response 回调。', req.originalUrl, err.timeout);
  }
  res.status(statusCode);
  // 默认不输出异常详情
  var error = {};
  if (app.get('env') === 'development') {
    // 如果是开发环境，则将异常堆栈输出到页面，方便开发调试
    error = err;
  }
  res.render('error', {
    message: err.message,
    error: error
  });
});

module.exports = app;
